﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProcelNasEscolas.Model.Fichas;
using ProcelNasEscolas.Model.Interfaces;
using ProcelNasEscolas.Model.Respostas;
using ProcelNasEscolas.Model;

namespace ProcelNasEscolas.Data
{
    public class ProfessorDao : AbstractCrudDao<ProfessorData>, IProfessorDao 
    {
        public Professor ToModelObject(ProfessorData professorData)
        {
            Professor professorModel = new Professor();
            professorModel.DesenvolveProjetosFocadosEmEducacaoAmbiental = professorData.DesenvolveProjetosFocadosEmEducacaoAmbiental;
            professorModel.Email = professorData.Email;
            professorModel.Id = professorData.Id;
            professorModel.LevouTemaParaSalaDeAula = professorData.LevouTemaParaSalaDeAula;
            professorModel.MateriaLecionada = professorData.MateriaLecionada;
            professorModel.NivelDeEnsino = professorData.NivelDeEnsino;
            professorModel.Nome = professorData.Nome;
            professorModel.PeriodoDeTrabalho = professorData.PeriodoDeTrabalho;
            professorModel.Telefone = professorData.Telefone;
         
            return professorModel;
        }

        public ProfessorData CreateOrUpdate(Professor professorModel)
        {
            
            try
            {
                ProfessorData professorData = new ProfessorData();

                IList<ProfessorData> professores = this.GetObjectContext().IEntidadeDataSet.OfType<ProfessorData>().Where(professor => professor.Id == professorModel.Id).ToList();

                if (professores.Count == 0)
                {
                    this.Add("IEntidadeDataSet", professorData);
                }
                else 
                {
                    professorData = professores.First();
                }

                professorData.DesenvolveProjetosFocadosEmEducacaoAmbiental = professorModel.DesenvolveProjetosFocadosEmEducacaoAmbiental;
                professorData.Email = professorModel.Email;
                professorData.LevouTemaParaSalaDeAula = professorModel.LevouTemaParaSalaDeAula;
                professorData.MateriaLecionada = professorModel.MateriaLecionada;
                professorData.NivelDeEnsino = professorModel.NivelDeEnsino;
                professorData.Nome = professorModel.Nome;
                professorData.PeriodoDeTrabalho = professorModel.PeriodoDeTrabalho;
                professorData.Telefone = professorModel.Telefone;

                this.SaveChanges();
                
                return professorData;
            }
            catch (Exception e)
            {
                System.Console.Out.WriteLine("" + e);
                return null;
            }
        }
        public Professor GetProfessor(int Id)
        {
            try
            {
                IList<ProfessorData> result = this.GetObjectContext().IEntidadeDataSet.OfType<ProfessorData>().Where(c => c.Id == Id).ToList();

                return this.ToModelObject(result.First());
            }
            catch (Exception e)
            {
                System.Console.Out.WriteLine("" + e);
                return null;
            }
        }

        public IList<Professor> GetAll()
        {
            IList<ProfessorData> result = this.GetObjectContext().IEntidadeDataSet.OfType<ProfessorData>()
                 .ToList();
            IList<Professor> professores = new List<Professor>();

            foreach (ProfessorData professor in result)
            {
                professores.Add(this.ToModelObject(professor));
            }

            return professores;
        }
     }
 }

